<?php

/*
 * FileSender www.filesender.org
 *
 * Copyright (c) 2009-2012, AARNet, Belnet, HEAnet, SURFnet, UNINETT
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * *    Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 * *    Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 * *    Neither the name of AARNet, Belnet, HEAnet, SURFnet and UNINETT nor the
 *     names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// Require environment (fatal)
if (!defined('FILESENDER_BASE')) {
    die('Missing environment');
}

/**
 * A general high level class for creating a test database full of data.
 *
 * Call getTestDatabaseCredentials(), getTestDatabaseTransfers() etc to get
 * specific objects that handle one aspect of the database creation.
 */
class TestDatabaseCreator
{
    protected $nextmsgid = 1;
    protected $verbose = true;
    protected $credentials = null;
    protected $transfers   = null;
    
    /**
     * Constructor
     *
     * @param string $to (optionnal)
     */
    public function __construct()
    {
    }

    public function getTestDatabaseCredentials()
    {
        if ($this->credentials) {
            return $this->credentials;
        }

        $this->credentials = new TestDatabaseCredentials($this);
        return $this->credentials;
    }

    public function getTestDatabaseTransfers()
    {
        if ($this->transfers) {
            return $this->transfers;
        }

        $this->transfers = new TestDatabaseTransfers($this);
        return $this->transfers;
    }
    
    /**
     * Setter
     *
     * @param string $property property to get
     * @param mixed $value value to set property to
     *
     * @throws FileBadHashException
     * @throws PropertyAccessException
     */
    public function __set($property, $value)
    {
        if ($property == 'verbose') {
            $this->verbose = (int)$value;
        } else {
            throw new PropertyAccessException($this, $property);
        }
    }

    public function output($msg)
    {
        if (!$this->verbose) {
            return;
        }
        echo $msg."\n";
    }
}
